Поезд состоит из
спальных вагонов, обозначенных буквой k,
и сидячих вагонов, обозначенных буквой p.
Найдите наибольшее количество спальных вагонов, следующих друг за другом в
поезде.
Вход. В одной строке содержится последовательность букв k и p,
длина которой от 1 до 1000 символов.
Выход. Вывести одно число – наибольшее количество следующих друг
за другом спальных вагонов.
Пример
входа |
Пример
выхода |
kpkkp |
2 |
строки
Анализ алгоритма
В заданной
строке необходимо найти самую длинную подстроку, состоящую только из букв k.
Объявим
переменную temp – счетчик подряд идущих
букв k. Если текущей является буква k, то увеличиваем temp на 1. Иначе сбрасываем temp
в 0. Максимальное достижимое значение temp
равно ответу, подсчитываем его в переменной res.
Пример
Рассмотрим
пример из условия задачи.
Реализация алгоритма
Входную строку храним в массиве s.
char s[1010];
Читаем входную строку s.
gets(s);
В переменной temp
подсчитываем количество идущих подряд букв k.
Ответ сохраняем в переменной res.
res = temp = 0;
Перебираем буквы строки s.
for (i = 0; i < strlen(s); i++)
{
Если текущей буквой является k, то увеличим temp на 1.
Иначе ряд из последовательных букв k
обрывается, устанавливаем temp равным
0.
if (s[i] == 'k') temp++; else
temp = 0;
Ответом является максимальное значение среди всех возможных
значений temp.
if (temp >
res) res = temp;
}
Выводим ответ.
printf("%d\n",res);
Реализация
алгоритма – string
Читаем входную
строку s.
cin >> s;
В переменной temp подсчитываем количество идущих подряд
букв k. Ответ сохраняем в переменной res.
res = temp = 0;
Перебираем буквы
строки s.
for (i = 0; i < s.size(); i++)
{
Если текущей
буквой является k, то увеличим temp на 1. Иначе ряд из последовательных
букв k обрывается, устанавливаем temp равным 0.
if (s[i] == 'k') temp++; else temp = 0;
Ответом является
максимальное значение среди всех возможных значений temp.
if (temp > res)
res = temp;
}
Выводим ответ.
cout << res << endl;
Реализация алгоритма – форматированный ввод
#include <cstdio>
#include <cstring>
char s[1010];
int res, len;
int main()
{
res = 0;
scanf("%[p]",s);
while(scanf("%[k]",s) == 1)
{
len = strlen(s);
if (len > res) res = len;
scanf("%[p]",s);
}
printf("%d\n",res);
return 0;
}
Java реализация
import java.util.*;
public class Main
{
public static void main(String []args)
{
Scanner con = new Scanner(System.in);
String s = con.nextLine();
int res = 0, temp = 0;
for (int i = 0; i < s.length(); i++)
{
if (s.charAt(i) == 'k') temp++; else temp = 0;
if (temp > res) res = temp;
}
System.out.println(res);
con.close();
}
}
Python
реализация
s = input()
В переменной c подсчитываем количество идущих подряд
букв k. Ответ сохраняем в переменной res.
c = res = 0
Перебираем буквы
строки s.
for x
in s:
Если текущей
буквой является k, то увеличим c на 1. Иначе ряд из последовательных
букв k обрывается, устанавливаем c равным 0.
if x == 'k':
c += 1
else: c = 0
Ответом является
максимальное значение среди всех возможных значений c.
res = max(res, c)
Выводим ответ.
print(res)